#include <iostream>
#include <coroutine>
#include <exception>

// 定义协程返回类型
template <typename T>
struct Task {
    // 协程句柄类型
    struct promise_type {
        T value_;
        // 协程初始挂起点
        std::suspend_never initial_suspend() { return {}; }
        // 协程最终挂起点
        std::suspend_never final_suspend() noexcept { return {}; }
        // 协程返回值
        void return_value(T value) { value_ = value; }
        // 协程异常处理
        void unhandled_exception() {}
        // 获取协程结果
        Task get_return_object() { return {}; }
    };
};

// 协程函数
Task<int> coroutineFunction() {
    std::cout << "Coroutine started." << std::endl;
    // 模拟一些工作
    co_return 42;
}

int main() {
    std::cout << "Main function started." << std::endl;
    // 调用协程函数
    auto task = coroutineFunction();
    std::cout << "Coroutine called, main function continues." << std::endl;
    // 这里没有实际获取协程结果的逻辑，仅作演示
    std::cout << "Main function finished." << std::endl;
    return 0;
}